package com.hyt.it.ogt.ykcj.mapper.grade;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hyt.it.ogt.ykcj.domain.grade.EnterpriseExamineeInfo;
import com.hyt.it.ogt.ykcj.domain.vo.EnterpriseExamineeInfoVo;
import com.hyt.it.ogt.ykcj.domain.vo.ExamReviewInfoVo;
import com.hyt.it.ogt.ykcj.domain.vo.QueryEnterpriseExamineeGradeVo;
import com.hyt.it.ogt.ykcj.domain.vo.export.ExportEnterpriseExamineeScoreVo;
import com.hyt.it.ogt.ykcj.domain.vo.export.ExportEnterpriseExamineeSubjectGradeScoreVo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 企业招聘考生信息Mapper接口
 *
 * @author liying
 * @date 2021-11-18
 */
public interface EnterpriseExamineeInfoMapper extends BaseMapper<EnterpriseExamineeInfo> {
    /**
     * 查询企业招聘考生信息
     *
     * @param id 企业招聘考生信息ID
     * @return 企业招聘考生信息
     */
    EnterpriseExamineeInfo selectEnterpriseExamineeInfoById(String id);

    /**
     * 查询企业招聘考生信息
     *
     * @param id 企业招聘考生信息ID
     * @return 企业招聘考生信息
     */
    EnterpriseExamineeInfo selectEnterpriseExamineeInfoByRelationId(String id);

    /**
     * 查询企业招聘考生信息
     *
     * @param examId 企业招聘考生信息ID
     * @return 企业招聘考生信息
     */
    List<EnterpriseExamineeInfo> selectEnterpriseExamineeInfoByExamId(String examId);

    /**
     * 查询企业招聘考生信息
     *
     * @param id 企业招聘考生信息ID
     * @return 企业招聘考生信息
     */
    List<EnterpriseExamineeInfo> selectEnterpriseExamineeInfoByExamIds(List<String> id);

    /**
     * 批量查找考生信息
     *
     * @param id
     * @return
     */
    List<EnterpriseExamineeInfo> selectEnterpriseExamineeInfoByIds(List<String> id);


    /**
     * 查询企业招聘考生信息数量
     *
     * @param enterpriseExamineeInfo 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    Integer selectEnterpriseExamineeInfoCount(EnterpriseExamineeInfo enterpriseExamineeInfo);


    /**
     * 查询企业招聘考生信息列表
     *
     * @param enterpriseExamineeInfo 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfo> selectEnterpriseExamineeInfoList(EnterpriseExamineeInfo enterpriseExamineeInfo);

    /**
     * 查询企业招聘考生信息列表
     *
     * @param enterpriseExamineeInfo 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfo> selectEnterpriseExamineeInfoListRealName(EnterpriseExamineeInfo enterpriseExamineeInfo);

    /**
     * 新增企业招聘考生信息
     *
     * @param enterpriseExamineeInfo 企业招聘考生信息
     * @return 结果
     */
    int insertEnterpriseExamineeInfo(EnterpriseExamineeInfo enterpriseExamineeInfo);

    /**
     * 修改企业招聘考生信息
     *
     * @param enterpriseExamineeInfo 企业招聘考生信息
     * @return 结果
     */
    int updateEnterpriseExamineeInfo(EnterpriseExamineeInfo enterpriseExamineeInfo);


    /**
     * 删除企业招聘考生信息
     *
     * @param id 企业招聘考生信息ID
     * @return 结果
     */
    int deleteEnterpriseExamineeInfoById(String id);

    /**
     * 批量删除企业招聘考生信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    int deleteEnterpriseExamineeInfoByIds(@Param("ids") String[] ids);


    /**
     * 删除考试考生数据
     *
     * @param examId
     * @return
     */
    int deleteEnterpriseExamineeInfoByExamId(@Param("examId") String examId);

    /**
     * 批量插入企业招聘考生信息
     *
     * @param list
     */
    void insertBatchEnterpriseExamineeInfo(List<EnterpriseExamineeInfo> list);

    /**
     * 批量插入企业招聘考生信息(合并考试)
     *
     * @param list
     */
    void insertBatchEnterpriseExamineeInfoMerge(List<EnterpriseExamineeInfo> list);

    /**
     * 获取企业招聘考生成绩信息分页列表
     *
     * @param queryExamineeGradeVo 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfoVo> selectEnterpriseExamineeGradePage(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo);


    /**
     * 获取考试组考生成绩信息分页列表
     *
     * @param queryExamineeGradeVo 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfoVo> selectGroupEnterpriseExamineeGradePage(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo);

    /**
     * 获取企业招聘考生科目成绩信息分页列表
     *
     * @param queryExamineeGradeVo 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfoVo> selectSubjectEnterpriseExamineeGradePage(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo);


    /**
     * 获取企业招聘考生复核信息分页列表
     *
     * @param queryExamineeGradeVo 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    List<ExamReviewInfoVo> selectReviewEnterpriseExamineeGradePage(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo);

    /**
     * 更新企业招聘考生归档状态（单ID操作）
     *
     * @param archivedStatus 归档状态
     * @param archivedDate   归档时间
     * @param id             考生ID
     * @return 结果
     */
    Integer updateArchiveById(@Param("archivedStatus") String archivedStatus, @Param("archivedDate") Date archivedDate, @Param("examId") String examId, @Param("id") String id);

    /**
     * 更新企业招聘考生归档状态（多ID操作）
     *
     * @param archivedStatus 归档状态
     * @param archivedDate   归档时间
     * @param ids            考生ID
     * @return 结果
     */
    Integer updateArchiveByIds(@Param("archivedStatus") String archivedStatus, @Param("archivedDate") Date archivedDate, @Param("ids") String[] ids);


    /**
     * 更新企业招聘考生归档状态（多ID操作）
     *
     * @param archivedStatus 归档状态
     * @param archivedDate   归档时间
     * @param ids            考生ID
     * @return 结果
     */
    Integer updateGroupArchiveByIds(@Param("archivedStatus") String archivedStatus, @Param("archivedDate") Date archivedDate, @Param("ids") String[] ids);


    /**
     * 更新企业招聘考生归档状态（考试ID操作）
     *
     * @param archivedStatus
     * @param archivedDate
     * @param examId
     * @return
     */
    Integer updateArchiveByExamId(@Param("archivedStatus") String archivedStatus, @Param("archivedDate") Date archivedDate, @Param("examId") String examId);

    /**
     * 更新企业招聘考生归档状态（考试ID操作）
     *
     * @param archivedStatus
     * @param archivedDate
     * @param examId
     * @return
     */
    Integer updateGroupArchiveByExamId(@Param("archivedStatus") String archivedStatus, @Param("archivedDate") Date archivedDate, @Param("examId") String examId);



    /**
     * 获取考试的科目信息
     *
     * @param examId    考试id
     * @param subjectId 科目id
     * @return 结果
     */
    List<ExportEnterpriseExamineeSubjectGradeScoreVo> getExamSubject(@Param("examId") String examId, @Param("subjectId") String subjectId);


    /**
     * 根据准考证号获取已经存在的考试
     *
     * @param admissionNo
     * @param examId
     * @return
     */
    List<EnterpriseExamineeInfo> selectAdmissionNos(@Param("admissionNo") String admissionNo, @Param("examId") String examId, @Param("idcard") String idcard);


    /**
     * 获取企业招聘考生成绩信息列表
     *
     * @param enterpriseExamineeInfoVo 企业招聘考生成绩信息
     * @return 结果
     */
    List<EnterpriseExamineeInfoVo> selectEnterpriseExamineeGradeList(EnterpriseExamineeInfoVo enterpriseExamineeInfoVo);

    /**
     * 根据判断是否存在
     *
     * @param id
     * @return
     */
    int CountById(String id);

    /**
     * 更新企业招聘考生合同状态（多ID操作）
     *
     * @param qualifiedStatus 合格状态 Y-合格，N-未合格
     * @param ids             考生ID
     * @return 结果
     */
    Integer updateQualifiedStatusByIds(@Param("qualifiedStatus") String qualifiedStatus, @Param("ids") String[] ids);



    /**
     * 更新考试组考生合同状态（多ID操作）
     *
     * @param qualifiedStatus 合格状态 Y-合格，N-未合格
     * @param ids             考生ID
     * @return 结果
     */
    Integer updateGroupQualifiedStatusByIds(@Param("qualifiedStatus") String qualifiedStatus, @Param("ids") String[] ids);


    /**
     * 更新企业招聘考生合同状态（多ID操作）
     *
     * @param regionName q区间名称
     * @param ids             考生ID
     * @return 结果
     */
    Integer updateRegionnameByIds(@Param("regionName") String regionName, @Param("ids") String[] ids);


    /**
     * 更新考试组考生合同状态（多ID操作）
     *
     * @param regionName q区间名称
     * @param ids             考生ID
     * @return 结果
     */
    Integer updateGroupRegionnameByIds(@Param("regionName") String regionName, @Param("ids") String[] ids);


    /**
     * 更新考试组考生合同状态（多ID操作）
     *
     * @param regionName q区间名称
     * @param ids             考生ID
     * @return 结果
     */
    Integer updateGroupQualifiedStatusAndRegionNameByIds(@Param("qualifiedStatus") String qualifiedStatus,@Param("regionName") String regionName, @Param("ids") String[] ids);


    /**
     * 获取企业招聘考试考生成绩需要导出的数据
     *
     * @param examineeIds 考生id列表
     * @param examId      考试id
     * @param archived    是否归档
     * @return 结果
     */
    List<ExportEnterpriseExamineeScoreVo> selectEnterpriseExamineeSubjectGradeByExamineeIds(@Param("examineeIds") String[] examineeIds,
                                                                                            @Param("examId") String examId, @Param("subjectId") String subjectId,
                                                                                            @Param("archived") String archived, @Param("examineeName") String examineeName,
                                                                                            @Param("qualifiedStatus") String qualifiedStatus);


    /**
     * 根据考试id和考生id获取考生信息
     *
     * @param examinId   考试id
     * @param examineeId 考生id
     * @return
     */
    EnterpriseExamineeInfo getExamineeByExamineeIdAndExaminId(@Param("examinId") String examinId, @Param("examineeId") String examineeId);


    /**
     * 根据考试查询归档考生数
     *
     * @param examId
     * @return
     */
    Integer countArchivedExaminee(@Param("examId") String examId);

    /**
     * 获取考生的总成绩信息
     * @param queryExamineeGradeVo
     * @return
     */
    List<EnterpriseExamineeInfo> selectExamineeExamList(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo);


    /**
     * 查询企业招聘考生信息列表
     *
     * @param certificates 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfo> selectExamineeInfoByCertificatesAndExaminId(@Param("examId") String examId,@Param("name") String name, @Param("certificates") String certificates);

    /**
     * 查询企业招聘考生信息列表
     *
     * @param examIds 考试ids
     * @param admissionNos 准考证号
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfo> selectEnterpriseExamineeInfoByExamIdsAndAdmissionNos(@Param("examIds") String[] examIds,@Param("admissionNos") String[] admissionNos);
    
    /**
	 * 获取同步考生的所有数据
	 * @param examId
	 * @return
	 */
    EnterpriseExamineeInfo getLastExamineeInfoByExamId(@Param("examId") String examId);

    /**
     * 获取关联考试下所有考生信息
     * @param examId
     * @return
     */
    List<EnterpriseExamineeInfo> getExamineeInfoByRootExamId(@Param("examId") String examId);


    /**
     * 更新考试组考生合同状态（多ID操作）
     *
     * @param regionName q区间名称
     * @param examIds             考生ID
     * @return 结果
     */
    Integer updateGroupRegionnameAndQualifiedStatus(@Param("regionName") String regionName,@Param("qualifiedStatus") String qualifiedStatus, @Param("examIds") String[] examIds);


    /**
     * 获取关联考试下所有考生省份
     * @param examId
     * @return
     */
    List<String> getExamineeProvinceCodeByExamId(@Param("examIds") String[] examId);



    /**
     * 查询企业招聘考生分析数据信息
     *
     * @param queryExamineeGradeVo 查询企业招聘考生分析数据信息
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfo> selectEnterpriseExamineeAnalysisInfoList(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo);


    /**
     * 查询企业招聘考生Id集合
     *
     * @param queryExamineeGradeVo 查询企业招聘考生分析数据信息
     * @return 查询企业招聘考生Id集合
     */
    List<String> selectEnterprisExamineeIds(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo);




}


